actaeon/README.md
2024-07-11 14:07:32 +00:00

8.7 KiB

#TODO: add maimai frontend

Actaeon

An ARTEMiS frontend.

WARNING: Back up your database

I am not responsible for misconfigurations that lead to database issues. You should back up your database before making any changes to it.

Important: your default database encoding must be unicode

You can change the encoding by running ALTER DATABASE aime CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Creating Database Tables

Before running the database importer script, you must create the tables in your database. This can be done by running the server once with AUTOMIGRATE enabled (see below), or by running npm run migrate (make sure you have run npm i first and have the DATABASE_URL environment variable set).

If you are running MySQL server, you may need to run SET GLOBAL log_bin_trust_function_creators = 1;

Building

Make sure you have set the required build-time variables correctly.

Building using Docker

Run docker compose build

Building without Docker

You may want to specify runtime variables by modifying .env.local

  1. Run npm i
  2. Run npm run build

Running

Make sure you have created tables and ran database importer and asset extractor.

Running using Docker

  1. Modify the runtime environment variables in docker-compose.yml
  2. Run docker compose up (or docker compose up -d to detach the output)

Running without Docker

  1. Set any runtime environment variables in .env.local that you have not set already.
  2. Run npm run start

Initial Promotion to Owner

In order to access all features of Actaeon, you need to have owner permissions. This can be done by setting the permissions column of your user inside the aime_user table to 255, or by running the server with ACTAEON_OWNER_ID set to your user id. Once one user is owner, they can promote other users to owner through the Actaeon web interface. You can find out your user id by inspecting your ARTEMiS logs:

Aimedb | INFO | access_code ******************** -> user_id 10000

Configuration

Environment variables can be added through .env.local or through the environment. At bare minimum, you will need to set the NEXT_PUBLIC_*_EXTENSION variables to the corresponding file extensions generated by the asset-extract.py script, along with the DATABASE_URL and NEXTAUTH_SECRET variables.

Build-time Variables

These variables can only be set in .env.local at build time: before running npm run build or before building the docker image.

Variable Description Examples Required
BASE_PATH The base path that the site will be hosted on. Required if you wish to serve the site through nginx from the same domain as your artemis server. (default: /web) /web No
ASSET_URL The URL or absolute path to where your assets will be hosted. This should be set to $BASE_PATH/assets unless you are using a different domain or path to serve assets. (default: /web/assets) /web/assets, /assets Yes
NEXT_PUBLIC_JACKET_EXTENSION The file extension that jacket images will use. .webp, .png, .avif Yes
NEXT_PUBLIC_IMAGE_EXTENSION The file extension that other images will use. .webp, .png, .avif Yes
NEXT_PUBLIC_MUSIC_EXTENSION The file extension that music will use. .opus, .m4a Yes
NEXT_PUBLIC_AUDIO_EXTENSION The file extension that other audio will use. .opus, .m4a Yes

Runtime Variables

These variables can be set at runtime through the environment or through the .env.local file

Variable Description Examples Required
DATABASE_URL URL to your artemis database, in the format mysql://user:pass@host:port/db_name mysql://aime:aime@127.0.0.1:3306/aime Yes
NEXTAUTH_SECRET or AUTH_SECRET Set this to a long random string (you can generate this by running openssl rand -base64 32 or npx auth secret on the command line) Yes
AUTOMIGRATE Automatically run new migrations on server startup true, false No
ACTAEON_OWNER_ID Set this to a user id to automatically grant this user owner permissions. 10000 No
COOKIE_SECURE Override the secure flag on authentication cookies (by default, the host protocol or the x-forwarded-proto header is used to determine this) true, false No
BCRYPT_ROUNDS The number of bcrypt rounds to hash passwords with (default: 12) 12, 14 No

Configuring nginx to serve Actaeon on the same domain as ARTEMiS

Nginx can be configured to serve Actaeon and ARTEMiS on the same domain. To do this, the BASE_PATH variable must be set to a non-root base path (for example, /web).

Your nginx config likely looks similar to this:

server {
	listen 80;
	server_name your.hostname.here;

	location / {
		# ...
		proxy_pass http://127.0.0.1:8080/;
	}
}

server {
	listen 443 ssl;
	server_name your.hostname.here;

	# ...

	location / {
		# ...
		proxy_pass http://127.0.0.1:8080/;
	}
}

You can serve Actaeon by adding some additional location blocks. Nginx must also have read access to Actaeon's assets. The following configs assume a base path of /web:

server {
	listen 80;
	server_name your.hostname.here;

	# redirect to https
	location = / {
		return 301 https://$host/;
	}

	location /web/ {
		return 301 https://$host$request_uri;
	}

	location / {
		# ...
		proxy_pass http://127.0.0.1:8080/;
	}
}

server {
	listen 443 ssl;
	server_name your.hostname.here;

	# ...

	# redirect root to web
	rewrite ^/$ /web/ last;

	# serve assets
	location /web/assets/ {
		# modify this path
		alias /path/to/actaeon/public/assets/;
		try_files $uri =404;
	}

	# uncomment if you want nginx to server nextjs static files
	# you will have to run ./docker-transfer-next-static.sh if running through docker
	#location /web/_next/static/ {
	#	# uncomment this if you have ngx_http_gzip_static_module
	#	#gzip_static on;
	#	#gzip_vary on;
	#	# uncomment this if you have ngx_http_brotli_static_module
	#	#brotli_static on;
	#
	#	# modify this path
	#	alias /path/to/actaeon/.next/static/;
	#	try_files $uri =404;
	#}

	# actaeon
	location /web {
		proxy_set_header X-Forwarded-Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto https;
		proxy_pass http://127.0.0.1:1430;
	}

	location / {
		# ...
		proxy_pass http://127.0.0.1:8080/;
	}
}