From e7df387af0e6c5d6061337f160f64e98a74c38b1 Mon Sep 17 00:00:00 2001 From: "Christopher C. Wells" Date: Sun, 30 May 2021 21:53:02 -0700 Subject: [PATCH] Add manual install instructions --- .env.example | 12 +++--- README.md | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 6 deletions(-) diff --git a/.env.example b/.env.example index 9fb6183..d67956a 100644 --- a/.env.example +++ b/.env.example @@ -3,11 +3,11 @@ # APP_NAME=kcal -APP_ENV=local +APP_ENV=production APP_KEY= -APP_DEBUG=true +APP_DEBUG=false APP_URL=http://127.0.0.1 -APP_PORT=8080 +APP_PORT=80 APP_SERVICE=app APP_TIMEZONE=UTC @@ -16,13 +16,13 @@ APP_TIMEZONE=UTC # DB_CONNECTION=mysql -DB_HOST=db +DB_HOST=localhost DB_PORT=3306 DB_DATABASE=kcal DB_USERNAME=kcal DB_PASSWORD=kcal -REDIS_HOST=redis +REDIS_HOST=localhost REDIS_PORT=6379 # @@ -36,7 +36,7 @@ REDIS_PORT=6379 #ALGOLIA_SECRET= SCOUT_DRIVER=elastic -ELASTIC_HOST=elasticsearch:9200 +ELASTIC_HOST=localhost:9200 ELASTIC_PORT=9200 # diff --git a/README.md b/README.md index 9f942ee..9223c34 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,119 @@ The [Heroku Redis](https://elements.heroku.com/addons/heroku-redis) add-on can b added to the app and will work without any configuration changes. It is left out of the default build only because it takes a very long time to provision. +### Manual + +This deployment process has been tested with an Ubuntu 20.04 LTS instance with +2GB of memory which should be enough to host the app for a few regular users. +The memory is primarily needed for Elasticsearch -- See the [Search](#search-mag) +section for other options if lower memory support is needed. + +1. Add [PHP 8.x repository](https://launchpad.net/~ondrej/+archive/ubuntu/php). + + sudo apt-get install software-properties-common + sudo add-apt-repository ppa:ondrej/php + +1. Add [Elasticsearch repository](https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html). + + wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - + echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list + +1. Update available packages. + + sudo apt-get update + +1. Install dependencies. + + sudo apt-get install elasticsearch mysql-server-8.0 ngingx-full php8.0 php8.0-bcmath php8.0-cli php8.0-curl php8.0-gd php8.0-intl php8.0-mbstring php8.0-mysql php8.0-redis php8.0-xml php8.0-zip redis + +1. Configure Elasticsearch to run at start up. + + sudo systemctl start elasticsearch + sudo systemctl enable elasticsearch + +1. Install Composer. + + curl -s https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin/ --filename=composer + +1. Clone the app repository. + + cd /var/www + sudo mkdir kcal + sudo chown $USER:`id -gn $USER` kcal + cd kcal + git clone https://github.com/kcal-app/kcal.git . + +1. Configure nginx to serve the app public files. + + sudo vim /etc/nginx/conf.d/kcal.conf + sudo service nginx restart + + Example config: + + server { + listen 80; + server_name 2gb.kcal.cooking; + root /var/www/kcal/public; + + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-Content-Type-Options "nosniff"; + + index index.php; + + charset utf-8; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + error_page 404 /index.php; + + location ~ \.php$ { + fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + include fastcgi_params; + } + + location ~ /\.(?!well-known).* { + deny all; + } + } + +1. Create database user (with secure credentials!). + + sudo mysql -u root + CREATE DATABASE `kcal`; + CREATE USER 'kcal'@'localhost' IDENTIFIED BY 'kcal'; + GRANT ALL ON `kcal`.* TO 'kcal'@'localhost'; + FLUSH PRIVILEGES; + +1. Generate an app key to use in the next step. + + php artisan --no-ansi key:generate --show + +1. Copy environment config file and adjust as desired. + + cp .env.example .env + + Set the `APP_KEY` to the value generated in the previous step and the `APP_URL` + to match the host configured in nginx. + +1. Run initial app installation/bootstrap commands. + + cd /var/www/kcal + composer install --optimize-autoloader --no-dev + php artisan migrate + php artisan elastic:migrate + php artisan config:cache + php artisan route:cache + php artisan view:cache + php artisan user:add --admin + +1. Visit the `APP_URL` and log in! + ## Configuration ### Media Storage