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.

95 lines
2.3 KiB
Markdown

11 months ago
# phCD
Continuous Deployment for PHC projects.
## Development
```bash
# First install the dependencies
$ pnpm install
# Run the local server
$ pnpm dev
# Build all
$ pnpm build
11 months ago
```
## Production Setup
Run the following command to bootstrap a **phCD** instance. As this service doesn't have auth for now, it's strongly recommended to publish only on a local ip like `127.0.0.1` and then access directly or via an ssh tunnel (something like `ssh -L 8080:127.0.0.1:8080 server`).
```bash
# Clone this repo
git clone https://git.phc.dm.unipi.it/phc/phcd
# Create config files and data folder
mkdir data.local
cp .env.sample .env
echo 'deploys: []' > config.yaml
# Built docker image
docker built . -t phcd
# Start container
docker run -d \
--name phcd \
--restart unless-stopped \
-p 127.0.0.1:8080:4321 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ./data.local:/app/data.local \
-v ./.env:/app/.env \
-v ./config.yaml:/app/config.yaml \
phcd
```
### Updating
Just pull changes and update the docker image, then use the command from before to restart the main container.
```bash
git pull
docker stop phcd
docker rm phcd
docker built . -t phcd
```
### TODO: Self-Updating
It should be possible to deploy itself using a git+dockerfile deployment. For now this is more complicated as this requires to stop itself and spawn a new docker container of itself.
~~**Idea 1.** Create another `self-update.Dockerfile` that also gets mounted `/var/run/docker.sock`, this new container will then run the previous commands~~ [...] if we want the volume to be a folder this cannot be easily done
11 months ago
## Architecture
Everything is stored in the `config.yaml` file. This file contains a list of projects to deploy and the configuration for each one.
```yaml
deploys:
- name: project1
url: https://github.com/username/project1
ref:
type: branch
value: main
11 months ago
type: dockerfile
options:
ports:
- 80:8080
volumes:
- /var/www/html:/var/www/html
11 months ago
- name: project2
url: ssh://example.org/username/project2.git
ref:
type: commit
value: '1234567'
11 months ago
type: docker-compose
options:
path: ./docker-compose.yml # already the default
- name: project3
url: https://github.com/username/project3
type: shell
options:
path: ./deploy.sh # already the default
```