How to host Ultralisp on my own server
Easy way
The easiest way to start a local Ultralisp server is to use
docker compose
.
Checkout the repository:
git clone https://github.com/ultralisp/ultralisp
cd ultralisp
And run:
docker compose run --rm mito migrate
docker compose up app
Note, you have at least 4G
of RAM
on your machine, to run all services, needed for Ultralisp!
Harder way
You may also build docker images out of Dockerfile and run them manually like this:
docker run --rm \
--name ultralisp \
-p 80:80 \
-p 4005:4005 \
-v `pwd`:/app \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
-e RESEND_API_KEY=key-xxxxxxxxxxxxx \
-e USER_AGENT=xxxxxxxxxxxxx \
40ants/ultralisp:latest
See the full list of env variables need by each component in the common-services.yaml
file.
Also, you might choose to build each component manuall. See the instruction in the Development
section.
Uploading distribution to S3
By default, Ultralisp stores data locally and serves it from the
/dist/
folder, like that:
http://my-ultralisp.org/dist/
. Hovewer, you may want to upload the
data to Amazon S3
and to serve it through something like Cloudflare.
To do this, you need to set these environment variables for ultralisp app:
UPLOADER_TYPE=s3
S3_BUCKET=dist.my-ultralisp.org
AWS_ACCESS_KEY_ID=*****
AWS_SECRET_ACCESS_KEY=*****
BASE_URL=http://dist.my-ultralisp.org/
- aURL
of the server which will serve the files. In simplest case, you would just point toS3
server like that: https://s3.amazonaws.com/dist.my-ultralisp.org/ but right now this will not work because Quicklisp does not supportHTTPS
:(
And you need to create a bucket on the S3
.
How to create a bucket
Go to the
AWS
console: https://s3.console.aws.amazon.com/s3/homePress https://s3.console.aws.amazon.com/s3/home?region=us-east-1#
Set you bucket's name such as a domain, like
dist.my-ultralisp.org
On a tab "Set permissions" remove ticks from these items:
Block new public
ACL
s and uploading public objectsRemove public access granted through public
ACL
sBlock new public bucket policies
Block public and cross-account access if bucket has public policies
When the bucket is created, go to the buckets policy page which should have an url like that: https://s3.console.aws.amazon.com/s3/buckets/dist.my-ultralisp.org/?region=us-east-1&tab=permissions and insert such code into the "Bucket Policy" tab:
{ "Id": "Policy1547940357563", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1547940349039", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::dist.my-ultralisp.org/*", "Principal": "*" } ] }
This will make this bucket readable to anybody.
Setup a proxy server
You need a proxy or CDN
which is able to serve data via plain HTTP
,
because Quicklisp client does not support HTTPS
yet. There is an
issue <https://github.com/quicklisp/quicklisp-client/issues/167>
_ on
the GitHub, please, vote for it.
I use Cloudflare because it is free and easy to setup.
To serve files via Cloudflare, turn on "Static website hosting" of the
bucket at AWS
. Set the "index document" as "ultralisp.txt".
After that, your quicklisp distribution will be available as http://dist.ultralisp.org.s3-website-eu-west-1.amazonaws.com