You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 lines
4.0 KiB
Markdown

[Easy!Appointments - Self Hosted Appointment Scheduler by alextselegidis](https://github.com/alextselegidis/easyappointments)
### Minimum File Structure
```
/home/
└── ~/
└── docker/
└── easyappointments/
└── docker/
```
The file structure here is slightly different from usual since we will be cloning a git repository to install this. Below are the steps needed to fully deploy easyappointments with our Caddy reverse proxy!
### 1. Clone repository, navigate to repostitory directory, and optionally check out the develop branch
```
cd ~/docker/
git clone https://github.com/alextselegidis/easyappointments.git
cd easyappointments
git checkout -b develop
```
### 2. Copy composer.json and composer.lock to ./docker/server
```
cp composer.lock docker/server
cp composer.json docker/server
```
### 3. Copy config-sample.php to config.php in the root repository and modify BASE_URL in config.php
Also change the database in config.php from `localhost` to `easyappointments-database:3306`
Please note I am using the parameter `const DEBUG_MODE = TRUE;` because the default `const DEBUG_MODE = FALSE;` doesn't work.
```
cp config-sample.php config.php
nano config.php
```
**config.php**
```
// ------------------------------------------------------------------------
// GENERAL SETTINGS
// ------------------------------------------------------------------------
const BASE_URL = 'https://appointments.example.com';
const LANGUAGE = 'english';
const DEBUG_MODE = TRUE;
// ------------------------------------------------------------------------
// DATABASE SETTINGS
// ------------------------------------------------------------------------
const DB_HOST = 'easyappointments-database:3306';
const DB_NAME = 'easyappointments';
const DB_USERNAME = 'root';
const DB_PASSWORD = 'root';
```
### 4. Modify permissions of the storage folder in the repository
```
chown -R www-data:www-data storage/
chmod -R 777 storage/
```
### 5. Modify the Dockerfile in ./docker/server from the root repository
```
nano docker/server/Dockerfile
```
**Dockerfile**
```
FROM php:7.4-apache
ENV COMPOSER_ALLOW_SUPERUSER=1
COPY --from=composer /usr/bin/composer /usr/bin/composer
WORKDIR "/var/www/html"
COPY composer.json /var/www/html/
COPY composer.lock /var/www/html/
RUN apt-get update && apt-get install -y zip unzip git libpng-dev
RUN docker-php-ext-install gd
RUN composer install --no-scripts --no-interaction --optimize-autoloader
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd gettext mysqli pdo_mysql
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
RUN a2enmod rewrite
```
6. Modify docker-compose inside ./docker/ folder of the root repository
**docker-compose.yml**
```
version: "3.1"
services:
mysql:
image: mysql:5.7
container_name: easyappointments-database
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=easyappointments
# ports:
# - "8001:3306"
server:
build: ./server
image: easyappointments-server:v1
container_name: easyappointments-server
# ports:
# - "8000:80"
volumes:
- ../:/var/www/html
- /var/www/html/vendor
- ./server/php.ini:/usr/local/etc/php/conf.d/99-overrides.ini
networks:
default:
external:
name: caddy_net
```
### 7. Add to Caddyfile (from ~/docker/caddy)
Remember to `docker exec -w /etc/caddy caddy caddy reload` after editing your Caddyfile.
```
appointments.example.com {
reverse_proxy easyappointments-server:80
}
```
### 8. Deploy Application
```
cd ~/docker/easyappointments/docker/
docker-compose up -d
```