150 lines
4.1 KiB
Markdown
150 lines
4.1 KiB
Markdown
# cmc-sales
|
|
|
|
## Development Setup
|
|
|
|
CMC Sales now runs both legacy CakePHP and modern Go applications side by side.
|
|
|
|
### Quick Start
|
|
|
|
``` shell
|
|
git clone git@code.springupsoftware.com:cmc/cmc-sales.git
|
|
cd cmc-sales
|
|
|
|
# Easy way - use the setup script
|
|
./start-development.sh
|
|
|
|
# Manual way
|
|
rsync -avz --progress cmc@sales.cmctechnologies.com.au:~/backups .
|
|
docker compose up --build
|
|
gunzip < backups/backup_*.sql.gz | mariadb -h 127.0.0.1 -u cmc -p cmc
|
|
```
|
|
|
|
### Access Applications
|
|
|
|
**Add to /etc/hosts:**
|
|
```
|
|
127.0.0.1 cmclocal
|
|
```
|
|
|
|
**Application URLs:**
|
|
- **CakePHP (Legacy)**: http://cmclocal - Original CakePHP 1.2.5 application
|
|
- **Go (Modern)**: http://localhost:8080 - New Go application with HTMX frontend
|
|
- **Database**: localhost:3306 (user: `cmc`, password: see `app/config/database.php`)
|
|
|
|
### Architecture
|
|
|
|
- **cmc-php**: Legacy CakePHP application (nginx proxied)
|
|
- **cmc-go**: Modern Go application (direct access on port 8080)
|
|
- **db**: Shared MariaDB database
|
|
- **nginx**: Reverse proxy for CakePHP app
|
|
|
|
Both applications share the same database, allowing for gradual migration.
|
|
|
|
### Requirements
|
|
|
|
- **Go Application**: Requires Go 1.23+ (for latest sqlc)
|
|
- Alternative: Use `Dockerfile.go.legacy` with Go 1.21 and sqlc v1.26.0
|
|
|
|
|
|
## Install a new server
|
|
|
|
(TODO this is all likely out of date)
|
|
|
|
### Requirements
|
|
|
|
Debian or Ubuntu OS. These instructions written for Debian 9.9
|
|
|
|
Assumed pre-work:
|
|
|
|
Create a new VM with hostname newserver.cmctechnologies.com.au
|
|
Configure DNS appropriately. cmctechnologies.com.au zones is currently managed in Google Cloud DNS on Karl's account:
|
|
https://console.cloud.google.com/net-services/dns/zones/cmctechnologies?project=cmc-technologies&authuser=1&folder&organizationId
|
|
|
|
Will need to migrate that to CMC's GSuite account at some point.
|
|
|
|
|
|
1. Install ansible on your workstation
|
|
```
|
|
apt-get install ansible
|
|
```
|
|
2. Clone the playbooks
|
|
```
|
|
git clone git@gitlab.com:minimalist.software/cmc-playbooks.git
|
|
```
|
|
3. Execute the playbooks
|
|
|
|
The nginx config expects the site to be available at sales.cmctechnologies.com.au.
|
|
|
|
You'll need to add the hostname to config/nginx-site, if this isn't sales.cmctechnologies.com.au
|
|
|
|
```
|
|
cd cmc-playbooks
|
|
# Add the hostname of your new server to the inventory.txt
|
|
ansible-playbook -i inventory.txt setup.yml
|
|
```
|
|
4. SSH to the new server and configure gitlab-runner
|
|
```
|
|
ssh newserver.cmctechnologies.com.au
|
|
sudo gitlab-runner register
|
|
```
|
|
5. SSH to the new server as cmc user
|
|
```
|
|
ssh cmc@newserver.cmctechnologies.com.au
|
|
```
|
|
|
|
6. Add the SSH key to the cmc-sales repo on gitlab as a deploy key
|
|
https://gitlab.com/minimalist.software/cmc-sales/-/settings/repository
|
|
```
|
|
cmc@cmc:~$ cat .ssh/id_rsa.pub
|
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFIdoWVp2pGDb46ubW6jkfIpREMa/veD6xZVAtnj3WG1sX7NEUlQYq3RKbZ5CThlw6GKMSYoIsIqk7p6zSoJHGlJSLxoJ0edKflciMUFMTQrdm4T1USXsK+gd0C4DUCyVkYFOs37sy+JtziymnBTm7iOeVI3aMxwfoCOs6mNiD0ettjJT6WtVyy0ZTb6yU4uz7CHj1IGsvwsoKJWPGwJrZ/MfByNl6aJ8R/8zDwbtP06owKD4b3ZPgakM3nYRRoKzHZ/SClz50SXMKC4/nmFY9wLuuMhCWK+9x4/4VPSnxXESOlENMfUoa1IY4osAnZCtaFrWDyenJ+spZrNfgcscD ansible-generated on cmc
|
|
```
|
|
|
|
6. Clone the cmc-sales repo
|
|
```
|
|
git clone git@gitlab.com:minimalist.software/cmc-sales.git
|
|
```
|
|
|
|
7. As root on new server configure mySQL user cmc
|
|
Note: get password from app/config/database.php
|
|
(or set a new one and change it)
|
|
```
|
|
# mysql -u root
|
|
CREATE USER 'cmc'@'localhost' IDENTIFIED BY 'password';
|
|
CREATE USER 'cmc'@'172.17.0.2' IDENTIFIED BY 'password';
|
|
CREATE database cmc;
|
|
GRANT ALL PRIVILEGES ON cmc.* TO 'cmc'@'localhost';
|
|
GRANT ALL PRIVILEGES ON cmc.* TO 'cmc'@'172.17.0.2';
|
|
```
|
|
|
|
8. Get the latest backup from Google Drive
|
|
|
|
In the shared google drive:
|
|
eg. backups/database/backup_20191217_21001.sql.gz
|
|
|
|
Copy up to the new server:
|
|
```
|
|
rsync backup_*.gz root@newserver:~/
|
|
|
|
```
|
|
|
|
9. Restore backup to cmc database
|
|
```
|
|
zcat backup_* | mysql -u cmc -p
|
|
```
|
|
|
|
10. Redeploy from Gitlab
|
|
https://gitlab.com/minimalist.software/cmc-sales/pipelines/new
|
|
|
|
11. You should have a new installation of cmc-sales.
|
|
|
|
12. Seems new Linux kernels break the docker
|
|
https://github.com/moby/moby/issues/28705
|
|
|
|
|
|
13. Mysql needs special args not to break
|
|
|
|
```
|
|
# /etc/mysql/my.cnf
|
|
sql_mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
|
|
```
|