{"id":26871095,"url":"https://github.com/codeadamca/pdfer","last_synced_at":"2025-03-31T07:18:28.319Z","repository":{"id":275492307,"uuid":"926235866","full_name":"codeadamca/pdfer","owner":"codeadamca","description":"A basi API that creates PDFs from HTML or a URL.","archived":false,"fork":false,"pushed_at":"2025-02-27T23:44:40.000Z","size":1066,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-28T08:13:50.419Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codeadamca.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-02T21:25:37.000Z","updated_at":"2025-02-27T23:44:43.000Z","dependencies_parsed_at":"2025-02-02T22:25:51.773Z","dependency_job_id":"6e3000ad-7b8f-49cf-b0ff-fccbed99b71d","html_url":"https://github.com/codeadamca/pdfer","commit_stats":null,"previous_names":["codeadamca/pdfer"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeadamca%2Fpdfer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeadamca%2Fpdfer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeadamca%2Fpdfer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeadamca%2Fpdfer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codeadamca","download_url":"https://codeload.github.com/codeadamca/pdfer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246429491,"owners_count":20775809,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-31T07:18:27.666Z","updated_at":"2025-03-31T07:18:28.311Z","avatar_url":"https://github.com/codeadamca.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PDFer\n\nA basic API tool that creates PDFs from HTML or a URL.\n\n\u003e This application is currently live at:  \n\u003e https://pdfer.codeadam.ca\n\nThis tool uses a basic Laravel app with Browsershot and Puppeteer to generate PDFs. Here are the steps to create a new Google Cloud E2 server and install the necessary libraries.\n\n1. Login to the [GCP Console](https://console.cloud.google.com/) and create a new E2 server using Ubuntu 22 LTS x86/64. Open HTTP and HTTPS in the Networking tab.\n2. Change the IP address to a static IP.\n3. Open up the GCP SSH tool and run a few update and upgrade commands:\n\n    ```\n    sudo apt update\n    sudo apt upgrade\n    sudo apt autoremove\n    ```\n\n4. Install Apache using these commannds:\n\n    ```\n    sudo apt install apt-utils \n    sudo apt install apache2 apache2-utils\n    sudo a2enmod rewrite\n    sudo a2enmod ssl\n    sudo service apache2 restart\n    ```\n\n    At this point you can enter your IP address (use http://) into a browser and you should see the default Apache page:\n\n    ![Apache Default Page](_readme/screenshot-apache.png)\n\n5. Using a terminal (Mac) create an SSH key:\n\n    ```\n    ssh-keygen -t rsa -b 4096 -C username\n    ```\n\n    Add the public key to the Google Cloud Platform Metadata.\n\n    Setup a new FileZilla SFTP connection. Add the IP address, username, and privat key file. Add the new user from the new SSH key to the `www-data` user group. Change any contents of the `/var/www/ folder to have user write permissions using `0775`.\n\n6. Install and configure MySQL:\n\n    ```\n    sudo apt-get install mysql-server\n    sudo mysql_secure_installation\n    ```\n\n    ```\n    sudo mysql\n    ```\n\n    ```\n    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY \"password\";\n    exit\n    ```\n    \n7. Insall PHP:\n\n    ```\n    sudo apt update\n    sudo add-apt-repository ppa:ondrej/apache2\n    sudo add-apt-repository ppa:ondrej/php\n    sudo apt install php8.3\n    ```\n\n    And all required PHP libraries:\n\n    ```\n    sudo apt-get install -y php8.3-cli php8.3-common php8.3-mysql php8.3-zip php8.3-gd\n    sudo apt-get install -y php8.3-mbstring php8.3-curl php8.3-xml php8.3-bcmath\n    ```\n    \n8. Install [Composer](https://getcomposer.org/):\n\n    ```\n    curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php\n    sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer\n    ```\n\n    And confirm Composer is installed:\n\n    ```\n    composer --version\n    ```\n    \n9. Install [GIT](https://git-scm.com/):\n\n    ```\n    sudo apt install git-all\n    sudo apt-get install install-info\n    ```\n\n    And comfirm Git is installed:\n\n    ```\n    git --version\n    ```\n\n10. Change the server password:  \n    \n    ```\n    sudo passwd\n    sudo apt update\n    sudo apt upgrade\n    ```\n    \n    And reboot:\n\n    ```\n    sudo reboot\n    ```\n\n11. Install [Webmin](https://webmin.com/):\n\n    ```\n    curl -fsSL https://download.webmin.com/jcameron-key.asc | sudo gpg --dearmor -o /usr/share/keyrings/webmin.gpg\n    ```\n\n    Then open up the `sources.list` file:\n\n    ```\n    sudo nano /etc/apt/sources.list\n    ```\n\n    And add this lkine to the ver bottom:\n\n    ```\n    deb [signed-by=/usr/share/keyrings/webmin.gpg] http://download.webmin.com/download/repository sarge contrib\n    ```\n\n    And intall Webmin:\n\n    ```\n    sudo apt update\n    sudo apt install webmin\n    ```\n    \n    Open up port 10000:\n\n    ```\n    sudo ufw allow 10000\n    ```\n\n    And open port 10000 in the VPC Network GCP console.\n\n    Reboot the server:\n\n    ```\n    sudo reboot\n    ```\n\n13. Clone the PDFer repo:\n\n    ```\n    sudo git clone https://github.com/codeadamca/pdfer\n    ```\n\n    Remove binary references from the PdfController.\n\n    Change ownership to Google user: thomasadam83\n    \n    Rename folder to pffer.codeadam.ca\n    Point virtual servers to public folder\n    \n12. Virtual Servers\n\n    Using Wemin add two new servers for the domin on 80 and 443.\n    \n12. Install an SSL using [LedtsEncrypt](https://letsencrypt.org/):\n\n    ```\n    sudo apt install certbot python3-certbot-apache  \n    sudo certbot\n    ```\n\n14. Error reporting:\n\n    ```\n    /etc/php/8.3/apache2/php.ini\n    Line 518: display_errors = On\n    ```\n\n    Restart Apache using `sudo service apache2 restart`.\n    \n13. Ad a virtual host using Webmin:\n\n    Port 80:\n    \n    ```\n    \u003cDirectory \"/var/www/academicintegrity.codeadam.ca\"\u003e\n        allow from all\n        Require all granted\n        AllowOverride All\n    \u003c/Directory\u003e\n    RewriteEngine on\n    RewriteCond %{SERVER_NAME} =academicintegrity.codeadam.ca\n    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]\n    ```\n    \n    Port 443:\n    \n    ```\n    \u003cDirectory /var/www/pdfer.codeadam.ca/public\u003e\n        AllowOverride All\n        Options None\n        Require all granted\n    \u003c/Directory\u003e\n    SSLCertificateFile /etc/letsencrypt/live/pdfer.codeadam.ca/fullchain.pem\n    SSLCertificateKeyFile /etc/letsencrypt/live/pdfer.codeadam.ca/privkey.pem\n    Include /etc/letsencrypt/options-ssl-apache.conf\n    ```\n\n15. Install Composer php libraries:\n\n    ```\n    composer install\n    ```\n\n16. Add a `.env` file for the application and make the following changes:\n\n    ```\n    DB_CONNECTION=null\n    SESSION_DRIVER=file\n    ```\n    \n    Generate an application key:\n    \n    ```\n    php artisan key:generate\n    ```\n\n17. Istall NVM:\n\n    https://www.geeksforgeeks.org/how-to-install-nvm-on-ubuntu-22-04/\n    \n    sudo apt-get update\n    \n    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash\n    \n    Terminal must are restarted\n    \n    nvm --version\n    \n    ```\n    export NVM_DIR=\"$HOME/.nvm\"\n    [ -s \"$NVM_DIR/nvm.sh\" ] \u0026\u0026 \\. \"$NVM_DIR/nvm.sh\"\n    [ -s \"$NVM_DIR/bash_completion\" ] \u0026\u0026 \\. \"$NVM_DIR/bash_completion\"\n    ```\n\n    ```\n    nvm install --lts\n\n    cd /var/www/pdfer.codeadam.ca  \n    npm i\n    npm audit fix\n    ```\n\n19. Change permissions.\n\nAdd www-data to thomasadam83 group\nChange ownership of storage folder to www-data recursively\n\n19) Add npm and node to paths\n\nn=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local\n\nsudo reboot\n\n20) Install Puppeteer and dependencies:\n\nsudo apt install ca-certificates fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils\n\nsudo npm install --location=global --unsafe-perm puppeteer --ignore-scripts\n\n// npx puppeteer browsers install chrome\n// sudo apt-get -y chromium-browser\n\ncd /var/www/pdfer.codeadam.ca \nnpx puppeteer browsers install\nnpx puppeteer browsers install chrome\n\n20) Change caching folder\n\ntouch .puppeteerrc.cjs\nnano .puppeteerrc.cjs\n\n```\nconst {join} = require('path');\n\n/**\n * @type {import(\"puppeteer\").Configuration}\n */\nmodule.exports = {\n    // Changes the cache location for Puppeteer.\n    cacheDirectory: join(__dirname, '.cache', 'puppeteer'),\n};\n```\n\n21. \n\n---\n\n## Project Stack\n\nThis project uses [PHP](https://www.php.net/), [Laravel](https://www.php.net/manual/en/book.image.php), and [Browsershot](https://spatie.be/docs/browsershot/v4/introduction).\n\n\u003cimg src=\"https://console.codeadam.ca/api/image/php\" width=\"60\"\u003e \u003cimg src=\"https://console.codeadam.ca/api/image/laravel\" width=\"60\"\u003e\n\n---\n\n## Repo Resources\n\n* [Laravel](https://laravel.com/)\n* [Browsershot](https://spatie.be/docs/browsershot/v4/introduction)\n\n\u003ca href=\"https://codeadam.ca\"\u003e\n\u003cimg src=\"https://cdn.codeadam.ca/images@1.0.0/codeadam-logo-coloured-horizontal.png\" width=\"200\"\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeadamca%2Fpdfer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodeadamca%2Fpdfer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeadamca%2Fpdfer/lists"}