Files
migrate/README.md
2026-03-25 02:41:17 -05:00

112 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# arcline-portal
Customer dashboard for arclineit.com. Provides SSL expiry monitoring and a support ticket system — without requiring customers to SSH into anything.
Sits alongside WHMCS for billing; handles everything WHMCS doesn't.
## Stack
- Go backend, vanilla HTML/CSS/JS (Arcline design system)
- SQLite (single file, no server required)
- Session-based auth (bcrypt + secure cookies)
- Ships as a single binary with embedded static assets and templates
## Modules
### SSL Expiry Dashboard
Customers add domains; the system checks cert expiry daily via TLS dial and displays status color-coded: green > 30d, amber 1430d, red < 14d.
### Support Tickets
Customer opens a ticket; Blake gets an email. Replies go back into the thread from the portal UI. No third-party helpdesk.
## Deployment
### Prerequisites
- Linux server (amd64 or arm64)
- nginx
- An `arcline` system user
### Build
```sh
# Local binary
make build
# Cross-compile for Linux
make linux-amd64
make linux-arm64
```
### Install
```sh
# Create directories and user
sudo useradd -r -s /sbin/nologin -d /opt/arcline-portal arcline
sudo mkdir -p /opt/arcline-portal
sudo chown arcline:arcline /opt/arcline-portal
# Copy binary
sudo cp arcline-portal-linux-amd64 /opt/arcline-portal/arcline-portal
sudo chmod +x /opt/arcline-portal/arcline-portal
# Copy and populate env file
sudo cp .env.example /opt/arcline-portal/.env
sudo chown arcline:arcline /opt/arcline-portal/.env
sudo chmod 600 /opt/arcline-portal/.env
# Edit /opt/arcline-portal/.env and fill in real values
```
### systemd
```sh
sudo cp deploy/arcline-portal.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now arcline-portal
sudo systemctl status arcline-portal
```
### nginx
```sh
sudo cp deploy/nginx-portal.conf /etc/nginx/sites-available/arcline-portal
sudo ln -s /etc/nginx/sites-available/arcline-portal /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
```
Expects TLS certificates at:
- `/etc/ssl/arclineit.com/fullchain.pem`
- `/etc/ssl/arclineit.com/privkey.pem`
### Seed first admin account
```sh
sudo -u arcline /opt/arcline-portal/arcline-portal \
-seed \
-username blake \
-name "Blake" \
-password "changeme"
```
## Environment variables
Copy `.env.example` to `.env` and set the following:
| Variable | Default | Description |
|---|---|---|
| `PORT` | `8082` | HTTP listen port (nginx proxies to this) |
| `DB_PATH` | `./portal.db` | Path to the portal SQLite database |
| `UPTIME_DB_PATH` | `../arcline-uptime/uptime.db` | Path to arcline-uptime's database (read-only); omit if not using uptime integration |
| `SESSION_SECRET` | | 32-byte hex secret for session tokens. Generate with: `openssl rand -hex 32` |
| `SMTP_HOST` | `mail.arclineit.com` | SMTP server hostname |
| `SMTP_PORT` | `587` | SMTP port (STARTTLS) |
| `SMTP_USER` | | SMTP username |
| `SMTP_PASS` | | SMTP password |
| `SMTP_FROM` | `portal@arclineit.com` | From address for outbound email |
| `ADMIN_EMAIL` | `blake@arclineit.com` | Receives new ticket notifications |
| `BASE_URL` | `https://portal.arclineit.com` | Base URL used in email links (no trailing slash) |
## License
MIT see [LICENSE](LICENSE).